#ifndef  HELPER_UTIL_SUBJECT_H
#define  HELPER_UTIL_SUBJECT_H


namespace helper {
namespace util {

template<typename E>
class ISubject{
public:
    virtual ~ISubject(){}
    virtual int notify(E * e) = 0;
};

class Event {
public:
    virtual ~Event(){}
};
class IPushSubject : public ISubject<Event>{
public:
    ~IPushSubject() override {}
    int notify(Event * event) override{
        return -1;
    }
};

class IPullSubject : public ISubject<IPullSubject> {
public:
    ~IPullSubject() override{}
    int notify(IPullSubject * subject) override{
        return -1;
    }
};

} // end of namespace util
} // end of namespace helper

#endif   /* HELPER_UTIL_SUBJECT_H */
